package com.ynet.middleground.user.bean;


import com.ynet.core.common.BaseReqObj;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;

/**
 * @program: 2019-10-12_userCenter
 * @description: 用户认证请求对象
 * @author: DaiGaoLe
 * @create: 2019-10-20 20:11
 **/
@Data
@ApiModel(value = "用户认证请求对象", description = "用户认证请求对象")
public class UserAuthentication extends BaseReqObj {

    private static final long serialVersionUID = 2605791675953460212L;
    /**
     * 用户id
     */
    @ApiModelProperty(value = "用户id", notes = "用户id", dataType = "Integer", required = true)
    @NotNull(message = "用户id不能为空")
    private Integer userId;

    /**
     * 邮箱
     */
    @ApiModelProperty(value = "邮箱", notes = "邮箱", dataType = "String")
    private String email;

    /**
     * 证书类型
     */
    @ApiModelProperty(value = "证书类型", notes = "证书类型", dataType = "String")
    private String certificateType;

    /**
     * 法定代表人姓名
     */
    @ApiModelProperty(value = "法定代表人姓名", notes = "法定代表人姓名", dataType = "String")
    private String legalRepresentativeName;

    /**
     * 法定代表人证件类型
     */
    @ApiModelProperty(
            value = "法定代表人证件类型:证件种类,00-统一社会信用代码,01-组织机构代码证,02-营业执照,03-税务登记证,04-身份证，" +
                    "05-护照，06-香港通行证，07-澳门通行证，08-台湾居民来往大陆通行证",
            notes = "法定代表人证件类型:证件种类,00-统一社会信用代码,01-组织机构代码证,02-营业执照,03-税务登记证,04-身份证，" +
                    "05-护照，06-香港通行证，07-澳门通行证，08-台湾居民来往大陆通行证",
            dataType = "String")
    @Size(max = 2, min = 2, message = "超出字段长度")
    private String lrnCertificateType;

    /**
     * 法定代表人证件号码
     */
    @ApiModelProperty(value = "法定代表人证件号码", notes = "法定代表人证件号码", dataType = "String")
    private String lrnCertificateNo;

    /**
     * 管理员姓名

    @ApiModelProperty(value = "管理员姓名", notes = "管理员姓名", dataType = "String")
    private String adminName;
     */
    /**
     * 管理员手机号码

    @ApiModelProperty(value = "管理员手机号码", notes = "管理员手机号码", dataType = "String")
    private String adminTelephone;
     */
    /**
     * 管理员证件类型

    @ApiModelProperty(
            value = "管理员证件类型:证件种类,00-统一社会信用代码,01-组织机构代码证,02-营业执照,03-税务登记证,04-身份证，" +
                    "05-护照，06-香港通行证，07-澳门通行证，08-台湾居民来往大陆通行证",
            notes = "管理员证件类型:证件种类,00-统一社会信用代码,01-组织机构代码证,02-营业执照,03-税务登记证,04-身份证，" +
                    "05-护照，06-香港通行证，07-澳门通行证，08-台湾居民来往大陆通行证",
            dataType = "String")
    private String adminCertificateType;
     */
    /**
     * 管理员证件号码

    @ApiModelProperty(value = "管理员证件号码", notes = "管理员证件号码", dataType = "String")
    private String adminCertificateNo;
     */
    /**
     * 管理员邮箱

    @ApiModelProperty(value = "管理员邮箱", notes = "管理员邮箱", dataType = "String")
    private String adminMail;
     */
    /**
     * 营业执照(影像资料),多个用逗号分割例如：1,2.
     */
    @ApiModelProperty(value = "营业执照(影像资料),多个用逗号分割例如：1,2.", notes = "营业执照(影像资料),多个用逗号分割例如：1,2.", dataType = "String")
    private String businessLicenseUrl;

    /**
     * 法定代表人代表证照(影像资料),多个用逗号分割例如：1,2.
     */
    @ApiModelProperty(value = "法定代表人代表证照(影像资料),多个用逗号分割例如：1,2.", notes = "法定代表人代表证照(影像资料),多个用逗号分割例如：1,2.", dataType = "String")
    private String lrnLicenseUrl;

    /**
     * 管理员证照(影像资料),多个用逗号分割例如：1,2.

    @ApiModelProperty(value = "管理员证照(影像资料),多个用逗号分割例如：1,2.", notes = "管理员证照(影像资料),多个用逗号分割例如：1,2.", dataType = "String")
    private String adminLicenseUrl;
     */
    /**
     * 企业注册地址
     */
    @ApiModelProperty(value = "企业注册地址", notes = "企业注册地址", dataType = "String")
    private String entRegeditAddress;

    /**
     * 经营地址
     */
    @ApiModelProperty(value = "经营地址", notes = "经营地址", dataType = "String")
    private String businessAddress;

    /**
     * 银行账号
     */
    @ApiModelProperty(value = "银行账号", notes = "银行账号", dataType = "String")
    private String bankAccount;

    /**
     * 账户名称
     */
    @ApiModelProperty(value = "账户名称", notes = "账户名称", dataType = "String")
    private String accountName;

    /**
     * 开户行
     */
    @ApiModelProperty(value = "开户行,对照中台提供字典上传", notes = "开户行,对照中台提供字典上传", dataType = "String")
    private String openBank;

    /**
     * 开户省
     */
    @ApiModelProperty(value = "开户省,对照中台提供字典上传", notes = "开户省,对照中台提供字典上传", dataType = "String")
    private String openAccountProvince;

    /**
     * 开户市
     */
    @ApiModelProperty(value = "开户市,对照中台提供字典上传", notes = "开户市,对照中台提供字典上传", dataType = "String")
    private String openingAccountCity;

    /**
     * 开户网点
     */
    @ApiModelProperty(value = "开户网点", notes = "开户网点", dataType = "String")
    private String openBranch;

    /**
     * 固定电话
     */
    @ApiModelProperty(value = "固定电话", notes = "固定电话", dataType = "String")
    private String fixedTelephone;

    /**
     * 开户许可证(影像资料),多个用逗号分割例如：1,2.
     */
    @ApiModelProperty(value = "开户许可证(影像资料),多个用逗号分割例如：1,2.", notes = "开户许可证(影像资料),多个用逗号分割例如：1,2.", dataType = "String")
    private String accountOpenPermitUrl;

    /**
     * 银行账户信息证明(影像资料),多个用逗号分割例如：1,2.
     */
    @ApiModelProperty(value = "银行账户信息证明(影像资料),多个用逗号分割例如：1,2.", notes = "银行账户信息证明(影像资料),多个用逗号分割例如：1,2.", dataType = "String")
    private String bankAccountInfoCertUrl;

    /**
     * 企业开票信息(影像资料),多个用逗号分割例如：1,2.
     */
    @ApiModelProperty(value = "企业开票信息(影像资料),多个用逗号分割例如：1,2.", notes = "企业开票信息(影像资料),多个用逗号分割例如：1,2.", dataType = "String")
    private String enterpriseBillingInformationUrl;

    /**
     * 企业类型
     */
    @ApiModelProperty(value = "企业类型", notes = "企业类型", dataType = "String")
    private String enterpriseType;

    /**
     * 企业状况
     */
    @ApiModelProperty(value = "企业状况", notes = "企业状况", dataType = "String")
    private String businessConditions;

    /**
     * 主营业务
     */
    @ApiModelProperty(value = "主营业务", notes = "主营业务", dataType = "String")
    private String mainBusiness;

    /**
     * 国标行业分类
     */
    @ApiModelProperty(value = "国标行业分类", notes = "国标行业分类", dataType = "String")
    private String internationalIndustryClass;

    /**
     * 客户层授信总额度
     */
    @ApiModelProperty(value = "客户层授信总额度", notes = "客户层授信总额度", dataType = "String")
    private String userCreditAmount;

    /**
     * 性别:1-未知的性别,2-男性,3-女性,9-未说明的性别
     */
    @ApiModelProperty(value = "性别:1-未知的性别,2-男性,3-女性,9-未说明的性别", notes = "性别:1-未知的性别,2-男性,3-女性,9-未说明的性别", dataType = "String")
    @Pattern(regexp = "^[\\x01-\\x7f]*$", message = "不能有中文字符")
    @Size(min = 1, max = 1, message = "长度为1")
    private String gender;

    /**
     * 本单位工作年限
     */
    @ApiModelProperty(value = "本单位工作年限", notes = "本单位工作年限", dataType = "String")
    @Pattern(regexp = "^[0-9]*$", message = "请输入正确的格式")
    @Size(min = 2, max = 2, message = "长度为2")
    private String workingYears;

    /**
     * 单位地址
     */
    @ApiModelProperty(value = "单位地址", notes = "单位地址", dataType = "String")
    private String unitAddress;

    /**
     * 单位名称
     */
    @ApiModelProperty(value = "单位名称", notes = "单位名称", dataType = "String")
    private String entityName;

    /**
     * 单位性质
     */
    @ApiModelProperty(value = "单位性质", notes = "单位性质", dataType = "String")
    private String unitNature;

    /**
     * 个人年收入
     */
    @ApiModelProperty(value = "个人年收入", notes = "个人年收入", dataType = "java.math.BigDecimal")
    private BigDecimal personalAnnualIncome;

    /**
     * 个人身份证明(影像资料),多个用逗号分割例如：1,2.
     */
    @ApiModelProperty(value = "个人身份证明(影像资料),多个用逗号分割例如：1,2.", notes = "个人身份证明(影像资料),多个用逗号分割例如：1,2.", dataType = "String")
    private String personalIdentificationUrl;

    /**
     * 工资发放日
     */
    @ApiModelProperty(value = "工资发放日", notes = "工资发放日", dataType = "Date")
    private Date payDay;

    /**
     * 婚姻状况:0-已婚,1-未婚
     */
    @ApiModelProperty(value = "婚姻状况:0-已婚,1-未婚", notes = "婚姻状况:0-已婚,1-未婚", dataType = "String")
    @Size(min = 1, max = 1, message = "长度为1")
    @Pattern(regexp = "[01]", message = "婚姻状况只能是0或者1(婚姻状况:0-已婚,1-未婚)")
    private String maritalStatus;

    /**
     * 家庭住址
     */
    @ApiModelProperty(value = "家庭住址", notes = "家庭住址", dataType = "String")
    private String homeAddress;

    /**
     * 居住状况
     */
    @ApiModelProperty(value = "居住状况", notes = "居住状况", dataType = "String")
    private String livingConditions;

    /**
     * 民族
     */
    @ApiModelProperty(value = "民族", notes = "民族", dataType = "String")
    @Pattern(regexp = "^[\\x01-\\x7f]*$",message = "不能有中文字符")
    @Size(min = 2, max = 2, message = "长度为2")
    private String nation;

    /**
     * 配偶姓名
     */
    @ApiModelProperty(value = "配偶姓名", notes = "配偶姓名", dataType = "String")
    private String spouseName;

    /**
     * 配偶证件类型
     */
    @ApiModelProperty(value = "配偶证件类型:证件种类,00-统一社会信用代码,01-组织机构代码证,02-营业执照,03-税务登记证,04-身份证", notes = "配偶证件类型:证件种类,00-统一社会信用代码,01-组织机构代码证,02-营业执照,03-税务登记证,04-身份证", dataType = "String")
    @Pattern(regexp = "^[\\x01-\\x7f]*$",message = "不能有中文字符")
    @Size(min = 2,max = 2,message = "长度为2")
    private String spouseCertificateType;

    /**
     * 配偶证件号码
     */
    @ApiModelProperty(value = "配偶证件号码", notes = "配偶证件号码", dataType = "String")
    private String spouseCertificateNo;

    /**
     * 配偶手机号码
     */
    @ApiModelProperty(value = "配偶手机号码", notes = "配偶手机号码", dataType = "String")
    private String spouseTelephone;

    /**
     * 收入来源
     */
    @ApiModelProperty(value = "收入来源", notes = "收入来源", dataType = "String")
    private String incomeSource;

    /**
     * 银行卡信息(影像资料),多个用逗号分割例如：1,2.
     */
    @ApiModelProperty(value = "银行卡信息(影像资料),多个用逗号分割例如：1,2.", notes = "银行卡信息(影像资料),多个用逗号分割例如：1,2.", dataType = "String")
    private String bankCardInfoUrl;

    /**
     * 银行开户行
     */
    @ApiModelProperty(value = "银行开户行", notes = "银行开户行", dataType = "String")
    private String bankOpenBank;

    /**
     * 证书类型
     */
    @ApiModelProperty(value = "证书类型", notes = "证书类型", dataType = "String")
    private String certificatesforType;

    /**
     * 职业
     */
    @ApiModelProperty(value = "职业", notes = "职业", dataType = "String")
    @Size(min = 3, max = 3, message = "字段长度为3")
    @Pattern(regexp = "^[\\x01-\\x7f]*$", message = "不能有中文字符")
    private String occupation;

    /**
     * 用户名称
     */
    @ApiModelProperty(value = "用户名称", notes = "用户名称", dataType = "String")
    private String userName;


    /**
     * 证件种类,00-统一社会信用代码,01-组织机构代码证,02-营业执照,03-税务登记证,04-身份证
     * 05-护照，06-香港通行证，07-澳门通行证，08-台湾居民来往大陆通行证
     */
    @ApiModelProperty(
            value = "证件种类,00-统一社会信用代码,01-组织机构代码证,02-营业执照,03-税务登记证,04-身份证，" +
                    "05-护照，06-香港通行证，07-澳门通行证，08-台湾居民来往大陆通行证",
            notes = "证件种类,00-统一社会信用代码,01-组织机构代码证,02-营业执照,03-税务登记证,04-身份证，" +
                    "05-护照，06-香港通行证，07-澳门通行证，08-台湾居民来往大陆通行证",
            dataType = "String")
    @Pattern(regexp = "^[\\x01-\\x7f]*$", message = "不能有中文字符")
    @Size(min = 2, max = 2, message = "长度为2")
    private String papersType;

    /**
     * 证件编号,
     * 当证件种类为00时该字段为统一社会信用代码,01时该字段为组织机构代码,02时该字段为营业执照,03时该字段为税务登记证，
     * 04时该字段为身份证，
     * 05时该字段为护照，06时该字段为香港通行证，07时该字段为澳门通行证，08时该字段为台湾居民来往大陆通行证
     */
    @ApiModelProperty(
            value = "证件编号,当证件种类为00时该字段为统一社会信用代码,01时该字段为组织机构代码,02时该字段为营业执照,03时该字段为税务登记证，04时该字段为身份证，" +
                    "05时该字段为护照，06时该字段为香港通行证，07时该字段为澳门通行证，08时该字段为台湾居民来往大陆通行证",
            notes = "证件编号,当证件种类为00时该字段为统一社会信用代码,01时该字段为组织机构代码,02时该字段为营业执照,03时该字段为税务登记证，04时该字段为身份证，" +
                    "05时该字段为护照，06时该字段为香港通行证，07时该字段为澳门通行证，08时该字段为台湾居民来往大陆通行证",
            dataType = "String")
    @Pattern(regexp = "^[\\x01-\\x7f]*$", message = "不能有中文字符")
    private String papersNo;

    /**
     * 证件有效期起,当证件种类为00时该字段为统一社会信用代码有效期,01时该字段为组织机构代码有效期
     */
    @ApiModelProperty(value = "证件有效期起,当证件种类为00时该字段为统一社会信用代码有效期,01时该字段为组织机构代码有效期", notes = "证件有效期起,当证件种类为00时该字段为统一社会信用代码有效期,01时该字段为组织机构代码有效期", dataType = "java.util.Date")
    private Date cerSdate;

    /**
     * 证件有效期止,当证件种类为00时该字段为统一社会信用代码有效期,01时该字段为组织机构代码有效期
     */
    @ApiModelProperty(value = "证件有效期止,当证件种类为00时该字段为统一社会信用代码有效期,01时该字段为组织机构代码有效期,长期为9999-12-31", notes = "证件有效期止,当证件种类为00时该字段为统一社会信用代码有效期,01时该字段为组织机构代码有效期,长期为9999-12-31", dataType = "java.util.Date")
    private Date cerEdate;
    
    /**
     * 营业执照编号
     */
    @ApiModelProperty(value = "营业执照编号", notes = "营业执照编号", dataType = "String")
    @Pattern(regexp = "^[\\x01-\\x7f]*$", message = "不能有中文字符")
    private String bussinessLicenseNo;
    
    /**
     * 营业执照有效期起
     */
    @ApiModelProperty(value = "营业执照有效期起", notes = "营业执照有效期起", dataType = "java.util.Date")
    private Date bussinessLicenseNoSdate;

    /**
     * 营业执照有效期止
     */
    @ApiModelProperty(value = "营业执照有效期止,长期为9999-12-31", notes = "营业执照有效期止,长期为9999-12-31", dataType = "java.util.Date")
    private Date bussinessLicenseNoEdate;
    
    /**
     * 税务登记证编号
     */
    @ApiModelProperty(value = "税务登记证编号", notes = "税务登记证编号", dataType = "String")
    @Pattern(regexp = "^[\\x01-\\x7f]*$", message = "不能有中文字符")
    private String taxRegistrationNo;
    
    /**
     * 税务登记证有效期起
     */
    @ApiModelProperty(value = "税务登记证有效期起", notes = "税务登记证有效期起", dataType = "java.util.Date")
    private Date taxRegistrationNoSdate;

    /**
     * 税务登记证有效期止
     */
    @ApiModelProperty(value = "税务登记证有效期止,长期为9999-12-31", notes = "税务登记证有效期止,长期为9999-12-31", dataType = "java.util.Date")
    private Date taxRegistrationNoEdate;


    /**
     * 注册资金币种
     */
    @ApiModelProperty(value = "注册资金币种", notes = "注册资金币种", dataType = "String")
    @Pattern(regexp = "^[\\x01-\\x7f]*$", message = "不能有中文字符")
    private String registeCurrency;


    /**
     * 注册资金金额
     */
    @ApiModelProperty(value = "注册资金金额", notes = "注册资金金额", dataType = "String")
    private String registeMoney;

    /**
     * 贷款卡卡号
     */
    @ApiModelProperty(value = "贷款卡卡号", notes = "贷款卡卡号", dataType = "String")
    private String creditCardno;

    /**
     * 企业性质:00其他，01股份合作制企业，02股份有限公司，03有限责任公司，04社会团体，05合伙企业，06个体户，07联营企业，08集体企业，09私营企业，10三资企业，11国有企业，12事业单位
     */
    @ApiModelProperty(value = "企业性质:00其他，01股份合作制企业，02股份有限公司，03有限责任公司，04社会团体，05合伙企业，06个体户，07联营企业，08集体企业，09私营企业，10三资企业，11国有企业，12事业单位", notes = "企业性质:00其他，01股份合作制企业，02股份有限公司，03有限责任公司，04社会团体，05合伙企业，06个体户，07联营企业，08集体企业，09私营企业，10三资企业，11国有企业，12事业单位", dataType = "String")
    @Size(min = 2, max = 2, message = "长度为2")
    @Pattern(regexp = "^[\\x01-\\x7f]*$", message = "不能有中文字符")
    private String corpMode;

    /**
     * 规模
     */
    @ApiModelProperty(value = "规模", notes = "规模", dataType = "String")
    private String corpScale;

    /**
     * 行业
     */
    @ApiModelProperty(value = "行业", notes = "行业", dataType = "String")
    private String bizType;

    /**
     * 主营业务
     */
    @ApiModelProperty(value = "主营业务", notes = "主营业务", dataType = "String")
    private String priBusiness;

    /**
     * 兼营业务
     */
    @ApiModelProperty(value = "兼营业务", notes = "兼营业务", dataType = "String")
    private String minorBusiness;

    /**
     * 职工人数
     */
    @ApiModelProperty(value = "企业从业人员人数", notes = "企业从业人员人数", dataType = "String")
    private String employeeAmount;

    /**
     * 上年度营业额
     */
    @ApiModelProperty(value = "上年营业收入（万元）", notes = "上年营业收入（万元）", dataType = "String")
    private String lastYearTurnover;
    
    /**
     * 被认证用户角色id
     */
//    @ApiModelProperty(value = "角色id", notes = "角色id", dataType = "Integer")
//    private Integer roleId;
    
    /**
     * 法定代表人授权委托书（影像资料）URL
     */
    @ApiModelProperty(value = "法定代表人授权委托书（影像资料）URL", notes = "法定代表人授权委托书（影像资料）URL")
    private String authorizationbookurl;
    
    /**
     * 邮寄地址
     */
    @ApiModelProperty(value = "邮寄地址", notes = "邮寄地址", dataType = "String")
    private String userAddress;
    
    /**
     * 附件
     */
    @ApiModelProperty(value = "企业附件信息", notes = "企业附件信息")
    private List<EnterpriseEnclosureReq> enclosureLists;

    @ApiModelProperty(value = "业态公司id", notes = "业态公司id")
    private Integer formatId;
}
